/**
  * 4.3 映射
  * 4.3.1 映射操作
  * 映射就是 key-value 的集合， 就类似于 Java 中的 Map。
  * 构造：
  * // 不可变构造映射
  * val scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
  * // 可变映射
  * val scores1 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
  * // 空映射
  * val scores2 = new scala.collection.mutable.HashMap[String, Int]
  * // 对偶
  * "Alice" -> 10
  * // 对偶元组
  * val scores3 = Map(("Alice", 10), ("Bob", 3), ("Cindy", 8))
  * 获取值：
  * val bobsScore = scores("Bob")
  * 如果映射中没有值， 则会抛出异常， 使用 contains 方法检查是否存在
  * key。如果通过 映射.get(键) 这样的调用返回一个 Option 对象， 要么是
  * Some， 要么是 None。
  * 更新值：
  * scores1("Bob") = 10
  * 如果 Bob 没有则新增。
  * 或者
  * scores1 += ("Bob" -> 10, "Fred" -> 7)
  * scores1 -= "Alice"
  * 你不能更新一个不可变映射， 但是可以获取一个修改过的新映射。大数据技术之 Scala 程序设计解析
  * 30
  * val newScores = scores + ("Bob" -> 10, "Fred" -> 7) // New map with update
  * 迭代映射：
  * for ((k, v) <- scores) println(k + " is mapped to " + v)
  * for (v <- scores.keys) println(v)
  * for (v <- scores.values) println(v)
  * 注意， 不可变映射也可以调用方法， 只不过产生新的映射。新映射和老映射共享大
  * 部分结构。 可变映射是在原映射基础上进行修改。
  * 4.3.2 和 Java 的互操作
  * 同上，使用 JavaConversions 进行转换
  *
  *
  */
// 多维数组 3行4列
val matrix = Array.ofDim[Double](3, 4)
// An array of arrays
/**
  * 0.0，0.0，17.29，0.0
  * 0.0，0.0，  0.0，0.0
  * 0.0，0.0，  0.0，0.0
  */
val row = 0
val column = 2

matrix(0)(2) = 17.29

matrix.length 
matrix(row) // An array
matrix(row).length 

val triangle = new Array[Array[Int]](10)

for (i <- triangle.indices) 
  triangle(i) = new Array[Int](i + 1)

triangle(0)(0) = 1

for (i <- 1 until triangle.length) {
  triangle(i)(0) = 1
  triangle(i)(i) = 1
  for (j <- 1 until triangle(i).length - 1) 
    triangle(i)(j) = triangle(i - 1)(j - 1) + triangle(i - 1)(j)
}

for (row <- triangle) {
  for (elem <- row) print(elem + " ") 
  println()
}


